package vcp.entity;

import java.util.ArrayList;
import java.util.List;

import vcp.enums.Departments;
import vcp.enums.JobType;
import vcp.enums.LotStatus;
import vcp.enums.Screen;
import vcp.enums.SiteEnum;
/**
 * Worker class includes getters and setters for relevant data 
 * @author VCP team
 *
 */
public abstract class Worker extends User
{
	/**
	 * 
	 */

	private static final long serialVersionUID = -5802070926388323299L;

	private List<Site> sites;
	/**
	 * getter
	 * @return sites
	 */
	public List<Site> getSites()
	{
		return this.sites;
	}
	/**
	 * setter
	 * @param sites
	 */
	public void setSites(List<Site> sites)
	{
		this.sites = sites;
	}

	private JobType jobType;
	/**
	 * getter
	 * @return job type
	 */
	public JobType getJobType()
	{
		return this.jobType;
	}
	/**
	 * setetr
	 * @param jobType
	 */
	public void setJobType(JobType jobType)
	{
		this.jobType = jobType;
	}

	private Departments department;
	/**
	 * getter
	 * @return department
	 */
	public Departments getDepartment()
	{
		return this.department;
	}
	/**
	 * setter
	 * @param department
	 */
	public void setDepartment(Departments department)
	{
		this.department = department;

	}

	private int workerID;
	/**
	 * getter
	 * @return worker Id
	 */
	public int getWorkerID()
	{
		return this.workerID;
	}
	/**
	 * setter
	 * @param workerID
	 */
	public void setWorkerID(int workerID)
	{
		this.workerID = workerID;
	}
	/**
	 * getter
	 * @return list of complaints
	 */
	public List<Complaint> getComplaints()
	{
		return new ArrayList<>();
	}
	/**
	 * setter
	 * @param complaints
	 */
	public void setComplaints(List<Complaint> complaints)
	{

	}
	/**
	 * getter
	 * @return list of site costs updates
	 */
	public List<SiteCostUpdates> getSiteCostUpdates()
	{
		return new ArrayList<>();
	}
	/**
	 * setter
	 * @param siteCostUpdates
	 */
	public void setSiteCostUpdates(List<SiteCostUpdates> siteCostUpdates)
	{

	}
	/**
	 * getter , returns worker screen type
	 * 
	 */
	@Override
	public Screen getInitScreenType()
	{
		return Screen.WORKER;
	}
	/**
	 * abstract getter 
	 * @return site enum array
	 */
	public abstract SiteEnum[] getSitesOptions();
	/**
	 * abstract getter
	 * @return array of lot statuses
	 */
	public abstract LotStatus[] getLotEditableStatuses();
	/**
	 * getter
	 * @return true if sites option enabled
	 */
	public abstract boolean getSitesOptionsEnable();
	/**
	 * abstract method
	 * @return true if has editing privileges
	 */
	public abstract boolean hasEditingPrivlige();
	/**
	 * abstract method
	 * @return true if can save to pdf
	 */
	public abstract boolean canSaveToPdf();
}
